//
// Normal.hpp for  in ~/Dropbox/Projets/raytracer-2016/Includes/Maths/
//
// Made by Jonathan
// Login   <ledey_l@epitech.net>
//
// Started on  Sun Sep 22 13:49:09 2013 Jonathan
// Last update Sun Sep 22 16:29:16 2013 Jonathan
//

#ifndef			NORMAL_HPP_
# define		NORMAL_HPP_

# include		<cmath>

namespace		Maths
{
  class			Vector;
  class			Point;
  class			Matrix;

  class			Normal
  {
  private:
    long double		mX;
    long double		mY;
    long double		mZ;

  protected:

  public:
    Normal(void);
    Normal(long double rValue);
    Normal(long double rX, long double rY, long double rZ);
    Normal(Normal const &rOther);
    Normal(Vector const &rVector);
    Normal(Point const &rPoint);
    Normal		&operator=(Normal const &rOther);
    Normal		&operator=(Vector const &rVector);
    Normal		&operator=(Point const &rPoint);
    ~Normal(void);

    Normal		operator-(void) const;
    Normal		operator+(Normal const &rOther) const;
    Normal		&operator+=(Normal const &rOther);
    Normal		operator*(long double rValue) const;
    long double		operator*(Vector const &rVector) const;
    long double		operator[](int rIndex) const;
    void		Normalize(void);
  };

  Normal		operator*(long double rValue, Normal const &rNormal);
  Vector		operator+(Vector const &rVector, Normal const &rNormal);
  Vector		operator-(Vector const &rVector, Normal const &rNormal);
  long double		operator*(Vector const &rVector, Normal const &rNormal);
  Normal		operator*(Matrix const &rMatrix, Normal const &rNormal);
};

#endif			/* NORMAL_HPP_ */
